Лабораторна робота № 3
Тема роботи: Програмування рекурсивних функцій
Мета роботи: ( практично закріпити теоретичні знання про рекурсивні функції; ( навчитися застосовувати рекурсивні функції для реалізації різноманітних рекурентних залежностей і процесів; ( порівняти рекурсивний та нерекурсивний (ітераційний) варіанти програми (функцій) за складністю, наочністю і швидкодією.
Завдання лабораторної роботи:
Перед початком роботи ознайомитися з теоретичним матеріалом щодо організації, структури, форм запису, роботи, переваг і недоліків рекурсивних функцій.
Розробити алгоритм розв’язування задачі з індивідуального завдання.
Написати ітераційний (нерекурсивний) варіант (варіанти) заданої функції. У процесі роботи ця функція може звертатися до інших допоміжних функцій.
Записати основну програму, в якій передбачити введення вхідних даних для контролю і перевірки правильності роботи розробленої функції та зручне відображення результатів на екрані. Якщо це сприятливо для програми, то розробити інші додаткові функції, наприклад, для введення чи виведення даних, виконання певних перевірок тощо.
Ввести текст програми та зберегти його в особистому каталозі.
Реалізувати програму для декількох наборів вхідних даних і занотувати результати.
Написати рекурсивний варіант реалізації заданої функції. Можливо, що рекурсивна функція буде викликатися з іншої додаткової функції або рекурсивна функція буде виконувати тільки якусь частину з того завдання, яке має виконувати вказана функція. Обов’язково треба звернути увагу на базис – умову завершення рекурсії та на коректне задання параметрів і запис рекурсивних викликів. Яку рекурсію – хвостову чи внутрішню краще застосувати в рекурсивній функції? Яка між ними різниця?
Реалізувати програму з рекурсивною функцією для тих самих вхідних даних, що в п.5, і порівняти отримані результати. Записати їх у звіт.
Доповнити рекурсивну функцію операторами виведення номера виклику функції. Для цього можна скористатись одним із параметрів функції, а якщо відповідного немає, то доповнити список таким параметром. Значення цього контрольного параметра треба виводити перед рекурсивним викликом і після нього. Запустити програму для рекурсії невеликої глибини (4-6). Проаналізувати виведені значення, пояснити їх і занести у звіт.
Офрмити звіт з лабораторної роботи. У висновках до роботи порівняти рекурсивний та ітераційний (нерекурсивний) варіанти реалізації заданих функцій.
Варіанти індивідуальних завдань
Розробити функцію, яка вилучає із заданої матриці дійсних чисел всі рядки, в яких мінімальний елемент не є першим, і повертає кількість вилучених рядків. Вилучення рядка полягає в підтягуванні всіх наступних рядків угору. З клавіатури ввести матрицю дійсних чисел. На основі розробленої функції перевірити рядки введеної матриці та вилучити ті, що не відповідають умові. Надрукувати матрицю після вилучення і вказати кількість видалених рядків.
Розробити функцію, яка визначає та виводить на екран всі можливі подання заданого натурального числа N (N (50000) у формі суми рівно k (k (10) доданків (теж натуральних чисел). З клавіатури ввести масив беззнакових цілих чисел. Використовуючи розроблену функцію, подати розклад кожного з введених чисел на задану кількість доданків. Забезпечити зупинку виведення після кожного числа.
Розробити функцію, яка обчислює найменше спільне кратне (НСК) двох заданих натуральних чисел. З клавіатури ввести декілька беззнакових цілих чисел. Використовуючи розроблену функцію, визначити НСК усіх введених чисел.
Розробити функцію, яка переставляє у зворотному порядку цифри заданого довгого цілого числа (наприклад, число 5321 перетворюється у 1235 ). З клавіатури ввести масив довгих цілих чисел. Використовуючи розроблену функцію, замінити всі числа цього масиву і надрукувати результат заміни.
Розробити функцію, яка вставляє в масив дійсних чисел, відсортований у порядку зростання значень елементів, додаткове число, зберігаючи загальну впорядкованість. З клавіатури ввести матрицю дійсних чисе...